home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / mem / mmurealloc.c < prev    next >
Encoding:
C/C++ Source or Header  |  2001-05-12  |  886 b   |  46 lines

  1.  
  2. #include "tek/mem.h"
  3. #include "tek/kn/exec.h"
  4.  
  5. /* 
  6. **    TEKlib
  7. **    (C) 2001 TEK neoscientists
  8. **    all rights reserved.
  9. **
  10. **    TAPTR TMMURealloc(TAPTR mmu, TAPTR mem, TUINT size)
  11. **
  12. **    reallocate an allocation from a MMU.
  13. **
  14. */
  15.  
  16. TAPTR TMMURealloc(TAPTR mmu, TAPTR mem, TUINT size)
  17. {
  18.     if (mmu)
  19.     {
  20.         if (((TMMU *) mmu)->reallocfunc)
  21.         {
  22.             return (*((TMMU *) mmu)->reallocfunc)(((TMMU *) mmu)->allocator, mem, size);
  23.         }
  24.         else if (((TMMU *) mmu)->getsizefunc)
  25.         {
  26.             TUINT oldsize = (*((TMMU *) mmu)->getsizefunc)(((TMMU *) mmu)->allocator, mem);
  27.             if (oldsize > 0)
  28.             {
  29.                 TAPTR newmem = (*((TMMU *) mmu)->allocfunc)(((TMMU *) mmu)->allocator, size);
  30.                 if (newmem)
  31.                 {
  32.                     TMemCopy32(mem, newmem, TMIN(oldsize, size));
  33.                     (*((TMMU *) mmu)->freefunc)(((TMMU *) mmu)->allocator, mem);
  34.                 }
  35.                 return newmem;
  36.             }
  37.         }
  38.     }
  39.     else
  40.     {
  41.         return kn_realloc(mem, size);
  42.     }
  43.  
  44.     return TNULL;
  45. }
  46.